package com.always;



import java.lang.reflect.Field;

/**
 * 
 * @author 墨渐生微
 *	判断对象的工具类
 */
public class ObjectUtil {

	/**
	 * 根据可变参数传入的属性名,判断该对象属性值是否为null
	 *  若可变参数不传,默认判断对象的所有属性
	 * @param obj 需要判断的对象
	 * @param fieldName 需要的部分属性名
	 * @return
	 */
	public static boolean isNotNull(Object obj, String... fieldName) {
		// 判断传入的对象是否为null
		if(null == obj){
			return false;
		}
		// 定义一个结果标志,默认为true
		boolean result = true;		
		try {
			// 获取传入对象的类类型
			Class<? extends Object> classType = obj.getClass();
			// 可变参数的控制标志
			boolean brach = true;
			// 判断可变参数:属性名, 如果没有属性名,则默认判断所有属性
			if(null != fieldName && 0 < fieldName.length){
				brach = false;
			}
			if(brach){
				// 根据类类型获取所有的属性
				Field[] declaredFields = classType.getDeclaredFields();
				// 遍历所有的属性
				for (Field field : declaredFields) {
					// 获取所有的属性值
					field.setAccessible(true);
					// 判断该属性的类型是否是字符串
					Object object = field.get(obj);
					// 获取属性的值进行判断
					if (null == object) {
						result = false;
						break;
					}
					// 判断字符串的内容是否为空串
					if (object instanceof String && ((String)object).trim().equals("")){
						result = false;
						break;
					}
				}
			}else{
				for (int i = 0; i < fieldName.length; i++) {
					Field field = classType.getDeclaredField(fieldName[i]);
					// 获取所有的属性值
					field.setAccessible(true);
					// 判断该属性的类型是否是字符串
					Object object = field.get(obj);
					// 获取属性的值进行判断
					if (null == object) {
						result = false;
						break;
					}
					if (object instanceof String && ((String)object).trim().equals("")){
						result = false;
						break;
					}
				}
			}			
		} catch (IllegalArgumentException | IllegalAccessException e) {
			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			e.printStackTrace();
		} catch (SecurityException e) {
			e.printStackTrace();
		}
		return result;
	}
}
